structinfo { int max; LL cnt; inlinevoidoperator += (const info &rhs) { if (Chkmax(max, rhs.max)) cnt = rhs.cnt; elseif (max == rhs.max) cnt = min(inf, cnt + rhs.cnt); } };
namespace BIT { #define lowbit(x) (x & (-x)) info sum[Maxn]; inlinevoidadd(int x, info val){ for (; x; x -= lowbit(x)) sum[x] += val; } inline info query(int x){ info ans = (info){0, 1}; for (; x <= N; x += lowbit(x)) ans += sum[x]; return ans; } }
typedef pair <int, LL> pil;
vector <pil> G[Maxn];
inlineintcmp(pil a, pil b){ return A[a.x] > A[b.x]; }
inlinevoidSolve() { for (int i = N; i >= 1; --i) { info now = BIT :: query (A[i] + 1); ++now.max; BIT :: add (A[i], now); G[now.max].pb(mp(i, now.cnt)); }
int ans = BIT :: query (1).max; printf("%d\n", N - ans);
int pos = 0; for (int i = ans; i >= 1; --i) { sort(G[i].begin(), G[i].end(), cmp); for (int j = 0; j < G[i].size(); ++j) { pil now = G[i][j]; int x = now.x; LL cnt = now.y; if (x < pos) continue; if (cnt >= K) { Vis[A[x]] = 1; pos = x; break; } K -= cnt; } }
for (int i = 1; i <= N; ++i) if (!Vis[i]) printf("%d\n", i); }
inlinevoidInput() { N = read<int>(), K = read<LL>(); for (int i = 1; i <= N; ++i) A[i] = read<int>(); }
int N, M, deg[Maxn], Vis[Maxn]; vector <int> G1[Maxn], G2[Maxn];
int anc[20][Maxn], dep[Maxn], dfn[Maxn], dfs_clock, size[Maxn];
inlinevoiddfs(int x) { dfn[x] = ++dfs_clock, size[x] = 1; dep[x] = dep[anc[0][x]] + 1; for (int i = 1; i <= 17; ++i) anc[i][x] = anc[i - 1][anc[i - 1][x]];
for (int i = 0; i < G1[x].size(); ++i) { int y = G1[x][i]; if (y == anc[0][x]) continue; anc[0][y] = x; dfs(y); size[x] += size[y]; } }
inlinevoidCheck() { staticqueue <int> Q; for (int i = 1; i <= N; ++i) if (deg[i] <= 1) Q.push(i), Vis[i] = 1;
int cnt = 0; while (!Q.empty()) { ++cnt; int x = Q.front(); Q.pop(); for (int i = 0; i < G1[x].size(); ++i) { int y = G1[x][i]; --deg[y]; if (!Vis[y] && deg[y] <= 1) Q.push(y), Vis[y] = 1; } for (int i = 0; i < G2[x].size(); ++i) { int y = G2[x][i]; --deg[y]; if (!Vis[y] && deg[y] <= 1) Q.push(y), Vis[y] = 1; } }
if (cnt != N) { for (int i = 1; i <= N; ++i) puts("0"); exit(0); } }
int Ans[Maxn], ANS[Maxn];
inlinevoidSolve() { dfs (1); for (int i = 1; i <= M; ++i) { int x = read<int>(), y = read<int>(); G2[x].pb(y), ++deg[y];
for (int i = 1; i <= N; ++i) Ans[i] += Ans[i - 1]; for (int i = 1; i <= N; ++i) printf("%d\n", !Ans[dfn[i]]); }
inlinevoidInput() { N = read<int>(), M = read<int>(); for (int i = 1; i < N; ++i) { int x = read<int>(), y = read<int>(); G1[x].pb(y), G1[y].pb(x); ++deg[x], ++deg[y]; } }